#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2024/9/11 20:21
# @Author  : 王凯
# @File    : __init__.py.py
# @Project : scrapy_spider
from components.config import WFQ_SOURCE_MYSQL_CONFIG, NET_ROBOT_MYSQL_CONFIG
from utils.db.mysqldb import MysqlDB
import pandas as pd

from utils.logs import logger

CODE_MAPPING = {
    "煤炭开采及洗选业": "6",
    "文教体育用品制造业": "24",
    "石油加工、炼焦及核燃料加工业": "25",
    "仪器仪表及文化、办公用机械制造业": "40",
    "燃气生产与供应业": "45",
    "农林牧渔业": "A",
    "饮料制造业": "15",
    "烟草制造业": "16",
    "纺织服装、鞋、帽制造业": "18",
    "皮革、毛皮、羽毛(绒)及其制品业": "19",
    "印刷业和记录媒介的复制": "23",
    "化学原料及化学制品制造业": "26",
    "黑色金属冶炼及压延加工业": "31",
    "有色金属冶炼及压延加工业": "32",
    "交通运输设备制造业": "37",
    "电气机械及器材制造业": "38",
    "通信设备、计算机及其他电子设备制造业": "39",
    "工艺品及其他制造业": "24",
    "废弃资源和废旧材料回收加工业": "42",
    "电力、燃气及水的生产和供应业": "D",
    "城市公共交通业": "541",
    "信息传输、计算机服务和软件业": "I",
    "农、林、牧、渔服务业": "5",
    "石油加工、炼焦和核燃料加工业": "25",
    "科学研究、技术服务和地质勘查业": "74",
    "环境管理业": "77",
    "居民服务和其他服务业": "80",
    "卫生、社会保障和社会福利业": "Q",
    "公共管理和社会组织": "S",
    "木材加工及木、竹、藤、棕、草制品业": "20",
    "造纸及纸制品业": "22",
    "石油、煤炭及其他燃料加工业加工业": "25",
    "电力、热力、燃气及水的生产和供应业": "D",
    "煤炭开采和洗选业": "6",
    "仪器仪表制造业": "40",
    "燃气生产和供应业": "45",
    "农、林、牧、渔业": "A",
    "酒、饮料和精制茶制造业": "15",
    "烟草制品业": "16",
    "纺织服装、服饰业": "18",
    "皮革、毛皮、羽毛及其制品和制鞋业": "19",
    "印刷和记录媒介复制业": "23",
    "化学原料和化学制品制造业": "26",
    "黑色金属冶炼和压延加工业": "31",
    "有色金属冶炼和压延加工业": "32",
    "铁路、船舶、航空航天和其他运输设备制造业": "37",
    "电气机械和器材制造业": "38",
    "计算机、通信和其他电子设备制造业": "39",
    "文教、工美、体育和娱乐用品制造业": "24",
    "废弃资源综合利用业": "42",
    "城市公共交通运输": "541",
    "信息传输、软件和信息技术服务业": "I",
    "农、林、牧、渔专业及辅助性活动": "5",
    "专业技术服务业": "74",
    "生态保护和环境治理业": "77",
    "居民服务业": "80",
    "卫生和社会工作": "Q",
    "公共管理、社会保障和社会组织": "S",
    "木材加工和木、竹、藤、棕、草制品业": "20",
    "造纸和纸制品业": "22",
    "石油、煤炭及其他燃料加工业": "25",
    "电力、热力、燃气及水生产和供应业": "D",
    "水的生产与供应业": "46",
    "电力、热力的生产与供应业": "44",
    '其他矿采选业': '12',
    '印刷业': '231',
    '工业': 'GY',
    '普通机械制造业': '38',
    '服装及其他纤维制品制造业': '28',
    '木材加工及竹、藤、棕、草制品业': '20',
    '木材及竹材采运业': '24',
    '烟草加工业': '16',
    '电力、蒸汽、热水的生产和供应业': 'D',
    '电子及通信设备制造业': '39',
    '皮革、毛皮、羽绒及其制品业': '19',
    '石油加工及炼焦业': '25',
    '自来水的生产和供应业': '461',
    '食品加工业': '13',
    '开采辅助活动': '11',
}


class BaseClean:

    def __init__(self):
        self._wfq_source_db = None
        self._to_db = None
        """
        ip = 'server-forward.local.wfq2020.com',
        db = 'net_robot_dev',
        port = 53308,
        user_name = 'net_robot_dev',
        user_pass = 'CdBkj0uNHB5ftFhn70LE',
        """

    @property
    def to_db(self):
        if not self._to_db:
            self._to_db = MysqlDB(
                ip=NET_ROBOT_MYSQL_CONFIG["MYSQL_IP"],
                port=NET_ROBOT_MYSQL_CONFIG["MYSQL_PORT"],
                db=NET_ROBOT_MYSQL_CONFIG["MYSQL_DB"],
                user_name=NET_ROBOT_MYSQL_CONFIG["MYSQL_USER_NAME"],
                user_pass=NET_ROBOT_MYSQL_CONFIG["MYSQL_USER_PASS"],
                # ip='server-forward.local.wfq2020.com',
                # db='net_robot_dev',
                # port=53308,
                # user_name='net_robot_dev',
                # user_pass='CdBkj0uNHB5ftFhn70LE',
            )
        return self._to_db

    @property
    def wfq_source_db(self):
        if not self._wfq_source_db:
            self._wfq_source_db = MysqlDB(
                ip=WFQ_SOURCE_MYSQL_CONFIG["MYSQL_IP"],
                port=WFQ_SOURCE_MYSQL_CONFIG["MYSQL_PORT"],
                db=WFQ_SOURCE_MYSQL_CONFIG["MYSQL_DB"],
                user_name=WFQ_SOURCE_MYSQL_CONFIG["MYSQL_USER_NAME"],
                user_pass=WFQ_SOURCE_MYSQL_CONFIG["MYSQL_USER_PASS"],
            )
        return self._wfq_source_db

    def get_data_from_db(self, cate_1, cate_2, cate_3=None, cate_4=None, **kwargs):
        sql = f"""
        SELECT *
        FROM net_data_stats
        WHERE cate_1 = '{cate_1}' and cate_2 = '{cate_2}'
        """
        if cate_3:
            sql += f" and cate_3 = '{cate_3}'"
        if cate_4:
            sql += f" and cate_4 = '{cate_4}'"
        if kwargs.get("condition"):
            sql += f' {kwargs.get("condition")} '
        df = pd.DataFrame(self.wfq_source_db.find(sql, to_json=True))
        logger.info(f"get {df.shape[0]} rows data from db, sql: {sql}")
        return df
